package samber

import (
	"fmt"
	"github.com/samber/lo"
)

// Union 联合返回给定集合中的所有不同元素，结果返回不会相对改变元素的顺序。
func Union() {
	list := []int{1, 2, 3, 3, 4}
	res := lo.Union(list)
	fmt.Printf("%v\n", res) // [1 2 3 4]
}

// Uniq 无重复版本，其中只保留每个元素的第一次出现。
func Uniq() {
	list := []int{1, 2, 2, 1}
	result := lo.Uniq(list)
	fmt.Printf("%v\n", result) // [1 2]
}

// UniqBy Uniq加上逻辑
func UniqBy() {
	list := []int{0, 1, 2, 3, 4, 5}
	result := lo.UniqBy(list, func(i int) int {
		return i % 3
	})
	fmt.Printf("%v\n", result) // [0 1 2]
}

func Unpack2() {
	a2, b2 := lo.Unzip2([]lo.Tuple2[string, int]{lo.T2("hello", 2)})
	fmt.Printf("%v %v\n", a2, b2) // [hello] [2]
}

func Unzip2() {
	result2 := lo.Zip2([]string{"hello", "world"}, []int{2, 3})
	fmt.Printf("%v\n", result2) // [{hello 2} {world 3}]
}
